RAMsetta Stone: Secret of Evermore
by: phonymike
Checksum and Strings
-
Boy stats
-
Dog stats
-
Various stats
The goal of this document is to show a complete conversion of WRAM addresses ($7E:0000
- $7F:FFFF
) into SRAM slot addresses.
While many descriptions are listed (copied from here), the value of this RAMsetta Stone is in the matching addresses it contains (SRAM and WRAM), and not the description of those addresses.
It is far quicker to search for changed values in a savestate (WRAM), than it is to travel to a save point in the game to commit changes (SRAM).
For more information about the saveram checksum and other details, see the Other Resources
at the bottom.
At the beginning of the .srm file, there are two bytes that are not part of the save slots. Byte 0x00
is for saving the mono/stereo
(0x00
/0x01
) setting, and byte 0x01
is for saving the last saved slot
number (0x00
/0x02
/0x04
/0x06
). These values are not covered by a checksum.
Following those two bytes, there are four save slots. The addresses in this document are relative to the beginning of each save slot.
If you want to change a value in a .srm file, you need to take the address in the SRAM
column and add it to one of the following slot offsets:
Save slot offsets in emulator .srm file
|
Save Slot #1
| 0x02
|
Save Slot #2
| 0x333
|
Save Slot #3
| 0x664
|
Save Slot #4
| 0x995
|
For instance, the Boy's name for slot #1 is located at 0x02 + 0x26 in the .srm file.
If any bytes are changed in a save slot, you must recalculate the checksum for that slot or the game will show an empty save slot.
Checksum and strings
SRAM
| Length
| Location
| Description (checksum and strings)
|
0x00
| 0x02
| (calculated at save time)
| Save slot checksum
|
0x02
| 0x24
| (Decompressed from ROM)
| Last save point name (zero padded, must end with byte 0x00)
|
0x26
| 0x24
| WRAM $7E:2210
| Boy name (zero padded, must end with byte 0x00)
|
0x4A
| 0x24
| WRAM $7E:2234
| Dog name (zero padded, must end with byte 0x00)
|
Boy stats
SRAM
| Length
| WRAM
| Description (Boy stats)
|
0x6E
| 0x02
| $7E:4EB3
| Current HP
|
SRAM
| Length
| WRAM
| Description (Boy stats)
|
0x70
| 0x02
| $7E:4ECF
| Status 1 - Status ID
|
0x72
| 0x02
| $7E:4ED1
| Status 1 - Main Timer
|
0x74
| 0x02
| $7E:4ED3
| Status 1 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
0x76
| 0x02
| $7E:4ED5
| Status 2 - Status ID
|
0x78
| 0x02
| $7E:4ED7
| Status 2 - Main Timer
|
0x7A
| 0x02
| $7E:4ED9
| Status 2 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
0x7C
| 0x02
| $7E:4EDB
| Status 3 - Status ID
|
0x7E
| 0x02
| $7E:4EDD
| Status 3 - Main Timer
|
0x80
| 0x02
| $7E:4EDF
| Status 3 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
0x82
| 0x02
| $7E:4EE1
| Status 4 - Status ID
|
0x84
| 0x02
| $7E:4EE3
| Status 4 - Main Timer
|
0x86
| 0x02
| $7E:4EE5
| Status 4 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
SRAM
| Length
| WRAM
| Description (unknowns)
|
0x88
| 0x02
| $7E:4F23
| unknown
|
0x8A
| 0x02
| $7E:4F25
| unknown
|
0x8C
| 0x02
| $7E:4F27
| unknown
|
SRAM
| Length
| WRAM
| Description (Boy stats)
|
0x8E
| 0x02
| $7E:0A35
| Max HP
|
SRAM
| Length
| WRAM
| Description (Boy stats)
|
0x90
| 0x02
| $7E:0A3F
| Attack
|
0x92
| 0x02
| $7E:0A41
| Defense
|
0x94
| 0x02
| $7E:0A43
| Magic Def
|
0x96
| 0x02
| $7E:0A45
| Evade %
|
0x98
| 0x02
| $7E:0A47
| Hit %
|
0x9A
| 0x03
| $7E:0A49
| Experience (3 bytes)
|
SRAM
| Length
| WRAM
| Description (Boy stats)
|
0x9D
| 0x02
| $7E:0A50
| Level
|
0x9F
| 0x02
| $7E:0A52
| Max Chargeup
|
The values below are curious. As far as I can tell, after saving your game, these values will always be 0x4F
.
It seems an oversight of the game programmers, as the game copies these values from $30:4Fxx
, which is open bus.
The values below will always be 0x4F
in a save file, but it seems the programmers meant to copy the values from $7E:4Fxx
.
SRAM
| Length
| Open bus
| WRAM (?)
| Description (Boy stats)
|
0xA1
| 0x02
| $30:4F29
| $7E:4F29
| Overall boost to Attack statistic
|
0xA3
| 0x02
| $30:4F2B
| $7E:4F2B
| Overall boost to Defense statistic
|
0xA5
| 0x02
| $30:4F2D
| $7E:4F2D
| Overall boost to Evade % statistic
|
0xA7
| 0x02
| $30:4F2F
| $7E:4F2F
| Overall boost to Hit % statistic
|
0xA9
| 0x02
| $30:4F31
| $7E:4F31
| Overall boost to Magic Defense statistic
|
0xAB
| 0x02
| $30:4F33
| $7E:4F33
| Last damage taken.
|
0xAD
| 0x02
| $30:4F35
| $7E:4F35
| Regenerate (Horace) or Pixie Dust protection in effect
|
Dog stats
SRAM
| Length
| WRAM
| Description (Dog stats)
|
0xAF
| 0x02
| $7E:4F61
| Current HP
|
SRAM
| Length
| WRAM
| Description (Dog stats)
|
0xB1
| 0x02
| $7E:4F7D
| Status 1 - Status ID
|
0XB3
| 0x02
| $7E:4F7F
| Status 1 - Main Timer
|
0xB5
| 0x02
| $7E:4F81
| Status 1 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
0xB7
| 0x02
| $7E:4F83
| Status 2 - Status ID
|
0xB9
| 0x02
| $7E:4F85
| Status 2 - Main Timer
|
0xBB
| 0x02
| $7E:4F87
| Status 2 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
0xBD
| 0x02
| $7E:4F89
| Status 3 - Status ID
|
0xBF
| 0x02
| $7E:4F8B
| Status 3 - Main Timer
|
0xC1
| 0x02
| $7E:4F8D
| Status 3 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
0xC3
| 0x02
| $7E:4F8F
| Status 4 - Status ID
|
0xC5
| 0x02
| $7E:4F91
| Status 4 - Main Timer
|
0xC7
| 0x02
| $7E:4F93
| Status 4 - Boost provided to statistic(s), OR Time since/until last/next damage/healing interval
|
SRAM
| Length
| WRAM
| Description (unknowns)
|
0xC9
| 0x02
| $7E:4FD1
| unknown
|
0xCB
| 0x02
| $7E:4FD3
| unknown
|
0xCD
| 0x02
| $7E:4FD5
| unknown
|
SRAM
| Length
| WRAM
| Description (Dog stats)
|
0xCF
| 0x02
| $7E:0A7F
| Max HP
|
SRAM
| Length
| WRAM
| Description (Dog stats)
|
0xD1
| 0x02
| $7E:0A89
| Attack
|
0xD3
| 0x02
| $7E:0A8B
| Defense
|
0xD5
| 0x02
| $7E:0A8D
| Magic Def
|
0xD7
| 0x02
| $7E:0A8F
| Evade %
|
0xD9
| 0x02
| $7E:0A91
| Hit %
|
0xDB
| 0x03
| $7E:0A93
| Experience (3 bytes)
|
SRAM
| Length
| WRAM
| Description (Dog stats)
|
0xDE
| 0x02
| $7E:0A9A
| Level
|
0xE0
| 0x02
| $7E:0A9C
| Max Chargeup
|
The values below are curious. As far as I can tell, after saving your game, these values will always be 0x4F
.
It seems an oversight of the game programmers, as the game copies these values from $30:4Fxx
, which is open bus.
The values below will always be 0x4F
in a save file, but it seems the programmers meant to copy the values from $7E:4Fxx
.
SRAM
| Length
| Open bus
| WRAM (?)
| Description (Dog stats)
|
0xE2
| 0x02
| $30:4FD7
| $7E:4FD7
| Overall boost to Attack statistic
|
0xE4
| 0x02
| $30:4FD9
| $7E:4FD9
| Overall boost to Defense statistic
|
0xE6
| 0x02
| $30:4FDB
| $7E:4FDB
| Overall boost to Evade % statistic
|
0xE8
| 0x02
| $30:4FDD
| $7E:4FDD
| Overall boost to Hit % statistic
|
0xEA
| 0x02
| $30:4FDF
| $7E:4FDF
| Overall boost to Magic Defense statistic
|
0xEC
| 0x02
| $30:4FE1
| $7E:4FE1
| Last damage taken.
|
0xEE
| 0x02
| $30:4FE3
| $7E:4FE3
| Regenerate (Horace) or Pixie Dust protection in effect
|
Various stats
SRAM
| Length
| WRAM
| Description (various things)
|
0xF0
| 0x02
| $7E:0ABA
| Current equipped weapon
|
0xF2
| 0x02
| $7E:0ABC
| unknown
|
0xF4
| 0x02
| $7E:0ABE
| Dog - Pointer to current Collar stats
|
0xF6
| 0x02
| $7E:0AC0
| Boy - Pointer to current Armor stats
|
0xF8
| 0x02
| $7E:0AC2
| Boy - Pointer to current Helmet stats
|
0xFA
| 0x02
| $7E:0AC4
| Boy - Pointer to current Armband stats
|
0xFC
| 0x03
| $7E:0AC6
| Money - Talons
|
0xFF
| 0x03
| $7E:0AC9
| Money - Jewels
|
0x102
| 0x03
| $7E:0ACC
| Money - Gold Coins
|
0x105
| 0x03
| $7E:0ACF
| Money - Credits
|
0x108 ... 0x154
| 0x4D
| $7E:0AD2 - $7E:0B1E
| Most are listed in Secret_of_Evermore:RAM_map
|
SRAM
| Length
| WRAM
| Description (Alchemy levels and unknowns)
|
0x155
| 0x46
| $7E:2F52
| Alchemy spell levels (low component)
|
0x19B
| 0x46
| $7E:2F98
| Alchemy spell levels (high component)
|
0x1E1 ... 0x1F6
| 0x16
| $7E:2FDE - $7E:2FF3
| unknown
|
SRAM
| Length
| WRAM
| Description (unknowns)
|
0x1F7 ... 0x288
| 0x92
| $7E:2258 - $7E:22E9
| unknown
|
SRAM
| Length
| WRAM
| Description (Alchemy ingredients and Inventory)
|
0x289 ... 0x2E4
| 0x5C
| $7E:22FF - $7E:235A
| Most are listed in Secret_of_Evermore:RAM_map
|
SRAM
| Length
| WRAM
| Description (unknowns)
|
0x2E5 ... 0x310
| 0x2C
| $7E:2361 - $7E:238C
| unknown
|
SRAM
| Length
| WRAM
| Description (Trade good amounts)
|
0x311 ... 0x330
| 0x20
| $7E:2513 - $7E:2532
| Most are listed in Secret_of_Evermore:RAM_map
|
Other Resources
Secret of Evermore SRAM Document by John David Ratliff - One of the best documents on SRAM
Secret of Evermore SRAM Format - Seems to be a transcription of the above text.
Secret of Evermore:RAM map - Addresses and descriptions of many WRAM variables.
Evermore «Rosetta Stone» project - Exploring the saveram format with custom search tools (web based and command line). Check here for updated descriptions of the addresses!
bsnes-plus - A great debugging SNES emulator used to trace the assembly and find these WRAM and SRAM addresses.
This document uses CSS template "markdown7" from Markdown css theme collection" by Jason Milkins.
RAMsetta Stone: Secret of Evermore - version 1 - February 8, 2021